home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / misc / getopt / getopt-parse.tcsh < prev    next >
Text File  |  2006-04-25  |  2KB  |  78 lines

  1. #!/bin/tcsh
  2.  
  3. # A small example program for using the new getopt(1) program.
  4. # This program will only work with tcsh(1)
  5. # An similar program using the bash(1) script language can be found
  6. # as parse.bash
  7.  
  8. # Example input and output (from the tcsh prompt):
  9. # ./parse.tcsh -a par1 'another arg' --c-long 'wow\!*\?' -cmore -b " very long "
  10. # Option a
  11. # Option c, no argument
  12. # Option c, argument `more'
  13. # Option b, argument ` very long '
  14. # Remaining arguments:
  15. # --> `par1'
  16. # --> `another arg'
  17. # --> `wow!*\?'
  18.  
  19. # Note that we had to escape the exclamation mark in the wow-argument. This
  20. # is _not_ a problem with getopt, but with the tcsh command parsing. If you
  21. # would give the same line from the bash prompt (ie. call ./parse.tcsh),
  22. # you could remove the exclamation mark.
  23.  
  24. # This is a bit tricky. We use a temp variable, to be able to check the
  25. # return value of getopt (eval nukes it). argv contains the command arguments
  26. # as a list. The ':q`  copies that list without doing any substitutions:
  27. # each element of argv becomes a separate argument for getopt. The braces
  28. # are needed because the result is also a list.
  29. set temp=(`getopt -s tcsh -o ab:c:: --long a-long,b-long:,c-long:: -- $argv:q`)
  30. if ($? != 0) then 
  31.   echo "Terminating..." >/dev/stderr
  32.   exit 1
  33. endif
  34.  
  35. # Now we do the eval part. As the result is a list, we need braces. But they
  36. # must be quoted, because they must be evaluated when the eval is called.
  37. # The 'q` stops doing any silly substitutions.
  38. eval set argv=\($temp:q\)
  39.  
  40. while (1)
  41.     switch($1:q)
  42.     case -a:
  43.     case --a-long:
  44.         echo "Option a" ; shift 
  45.         breaksw;
  46.     case -b:
  47.     case --b-long:
  48.         echo "Option b, argument "\`$2:q\' ; shift ; shift
  49.         breaksw
  50.     case -c:
  51.     case --c-long:
  52.         # c has an optional argument. As we are in quoted mode,
  53.         # an empty parameter will be generated if its optional
  54.         # argument is not found.
  55.  
  56.         if ($2:q == "") then
  57.             echo "Option c, no argument"
  58.         else
  59.             echo "Option c, argument "\`$2:q\'
  60.         endif
  61.         shift; shift
  62.         breaksw
  63.     case --:
  64.         shift
  65.         break
  66.     default:
  67.         echo "Internal error!" ; exit 1
  68.     endsw
  69. end
  70.  
  71. echo "Remaining arguments:"
  72. # foreach el ($argv:q) created problems for some tcsh-versions (at least
  73. # 6.02). So we use another shift-loop here:
  74. while ($#argv > 0)
  75.     echo '--> '\`$1:q\'
  76.     shift
  77. end
  78.